#!/usr/bin/env python
# -*- coding: utf-8 -*-

##
# Módulos del sistema
import os
try:
    import pygtk
    pygtk.require("2.0")
    import gtk
    import gtk.glade
except ImportError, error:
    print error
    print "Necesitas la librería gráficas gtk+pygtk"
#import gnome
##
# Módulos propios
from lib.HTMLParser import HTMLParser
from lib.ParserCSS import ParserCSS

class Gchmtopdf:
    """Ventana principal.

    Sera la encargada de la gestión de la ventana principal de la aplicación en
    el entorno gráfico de gnome.
    """

    def __init__(self):
        """Constructor"""
        self.gladefile = "doc/gui/gnome/gchmtopdf.glade"
        self.wTree = gtk.glade.XML(self.gladefile, "window1")
        self.un_dict = {"on_window1_destroy": self.close,
                "on_button2_clicked": self.close,
                "on_button1_clicked": self.compilar,
                "on_checkbutton1_toggled": self.mostrar_configuracion,
                "on_button9_clicked": self.about}
        self.wTree.signal_autoconnect(self.un_dict)
        self.set_filter()
        self.libro = {}
        # Probando agregar toltip a unos widget
        #tol = gtk.Tooltips()
        #tol.set_tip(self.wTree.get_widget("filechooserbutton3"),"hola carnavel",tip_private=None)

    def close(self, widget):
        ""
        "Cerrara la aplicación."""
        print "Gracias por utilizar la aplicación"
        gtk.main_quit()
    
    def about(self,*args):
        """ Algo """
        dialog = gtk.AboutDialog()
        authorNames = ("Heizenreder Guillermo", "Kaufmann Manuel")
        autores = ("Heizenreder Guillermo <gheize@gmail.com>", "Kaufmann Manuel <humitos@gmail.com>")
        dialog.set_authors(autores)
        dialog.set_documenters(autores)
        dialog.set_name("Gchmtopdf")
        dialog.set_website("http://code.google.com/p/chmtopdf/")
        # load GPL text file
        try:
            archivo = open('./gnome/GPL.txt','r')
            lineas_archivo = archivo.readlines()
        except IOError, err:
            print "IO Error %s" % err
        except:
            print "Error inesperado"
        gpl = ""
        for line in lineas_archivo:
            gpl += line
        archivo.close()
        dialog.set_license(gpl)
        dialog.set_comments("Convierte archivos .chm a .pdf")
        dialog.set_version("0.3")
        dialog.set_copyright("Copyright © 2007 " + authorNames[0] +
                "\nCopyright © 2007 " + authorNames[1])
        dialog.show()

    def compilar(self, widget):
       """Permitirá compilar la aplicación."""
       self.importar_datos()
       if self.datos_validos():
            self.imprimir_en_consola()
            if self.libro["css"]:
                pass
            else:
                pass
       else:
            error = "Unos de los campos de direcciones es incorrecto."
            padre = self.wTree.get_widget("window1")
            msj_error = gtk.MessageDialog(parent=padre, flags=0, type=gtk.MESSAGE_ERROR,
                    buttons=gtk.BUTTONS_OK, message_format=None)
            msj_error.set_markup(error)
            msj_error.set_title("Error - Gchmtopdf")
            #msj_error.format_secondary_markup("message_format")
            if msj_error.run():
                msj_error.destroy()

    
    def datos_validos(self):
        """Valida los campos obligatorios de la obligacion"""
        if ( self.libro["primero"] is not None and
                self.libro["ultimo"] is not None and
                self.libro["folder"] is not None):
            return True
        else:
            return False

    def set_filter(self):
        """Crea filtro de archivo html.

        Permite...

        """
        filtro_html = gtk.FileFilter()
        filtro_html.add_mime_type("text/html")
        filtro_html.set_name("Documento HTML")

        self.wTree.get_widget("filechooserbutton3").add_filter(filtro_html)
        self.wTree.get_widget("filechooserbutton4").add_filter(filtro_html)


    def importar_datos(self):
        """Permitirá tomar los datos.

        No solo se encargará de la toma de datos sino que ademas comprobará los
        campos y en caso de faltar alguno ejecutará un GDialog.

        """

        # Datos del archivo
        self.libro["primero"] = self.wTree.get_widget("filechooserbutton3").get_filename()
        self.libro["ultimo"] = self.wTree.get_widget("filechooserbutton4").get_filename()
        self.libro["folder"] = self.wTree.get_widget("filechooserbutton5").get_filename()
        self.libro["imagenes"] = self.wTree.get_widget("filechooserbutton6").get_filename()
        # Datos del documento
        self.libro["titulo"] = self.wTree.get_widget("entry10").get_text()
        self.libro["autor"] = self.wTree.get_widget("entry11").get_text()
        self.libro["fecha"] = self.wTree.get_widget("entry12").get_text()
        # Probando el check Box
        if self.wTree.get_widget("checkbutton1").get_active():
            self.libro["css"] = True
        else:
            self.libro["css"] = False
        salida_tex = self.libro["titulo"].replace(" ","") + ".tex"
        self.libro["salida_tex"] = os.path.join(self.libro["folder"],salida_tex)

    def mostrar_configuracion(self, widget):
        """Button8 eneable/diseable.

        Gestionara el estado del boton configurar.

        """
        if self.wTree.get_widget("checkbutton1").get_active():
            self.wTree.get_widget("button8").set_sensitive(True)
        else:
            self.wTree.get_widget("button8").set_sensitive(False)

    def imprimir_en_consola(self):
        """Imprime en consola."""
        print "------------------------------------------------------"
        for k,v in self.libro.iteritems():
            print k,v
        print "------------------------------------------------------"
"""
if __name__=="__main__":
    aplicacion = Gchmtopdf()
    gtk.main()
"""
